package web后端.会话跟踪.登录认证.登录标记.令牌技术.JWT令牌.概述;

/**
 * JWT令牌<p>
 * 详见项目<a href="#">springboot-session-tracking-jwt</a>
 */
public class index {
    /**
     * JWT（JSON Web Token；<a href="https://jwt.io/">JWT官网</a>，其中Token指的就是令牌）<p>
     * JWT定义了一种<a href="#">简洁的、自包含</a>的格式，用于在通信双方以<a href="#">Json</a>数据格式安全地传输信息<p>
     * 由于<a href="#">数字签名</a>的存在，这些信息是可靠的<p></p>
     * <p>
     * 说白了，JWT就是对原来的Json数据格式进行了安全的封装<p>
     * 这样我们就可以基于JWT在通信双方安全地传输信息了<p></p>
     *
     * <a href="#">简洁</a>：指的是JWT就是一个简单的<a href="#">字符串</a>，我们可以在请求参数或请求头中直接传递JWT<p>
     * <a href="#">自包含</a>：JWT看似是一个简单的字符串，但其实我们是可以根据需要在JWT中存储自定义内容的<p>
     * <a href="#">数字签名</a>：JWT中存储了签名，接收方可以通过签名验证JWT的合法<p>
     * 数字签名可以理解为在数据上添加的一组数字和字母，用于确保数据的完整性和安全性。
     * 在JWT中，数字签名通常由签名密钥（secret）生成，签名密钥可以是API密钥或其他密钥。
     * 当用户尝试使用JWT进行身份验证时，服务器会检查签名是否与期望的签名相匹配。
     * 如果签名匹配，则表示用户身份有效。<p></p><p></p>
     * <p>
     * JWT令牌的组成：<p>
     * JWT令牌由三部分组成，每部分中间使用点（.）分隔<p>
     * 形如：<p>
     * eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c<p>
     * <p>
     * 第一部分：Header（头），记录令牌类型，签名算法等。例如{"alg":"HS256","type":"JWT"}<p>
     * 第二部分：Payload（有效载荷），携带一些自定义信息、默认信息（签发日期、有效期等等）等。例如：{"id":"1","username":”Tom"}<p>
     * 第三部分：Signature（签名/数字签名），防止Token被篡改，确保安全性。签名是将Header、Payload，加入指定密钥（secret），通过指定签名算法计算而来<p></p>
     * <p>
     * Json字符串转换为JWT时，会对Json字符串进行base64编码。<p>
     * base64：是一种基于64个可打印字符（A-Z a-z 0-9 + /，还有一个补位符号：=，不计入64个字符）来表示二进制数据的编码方式。
     * <a href="#">注意：不是加密方式，是编码方式（能解码）</a><p></p>
     * <p>
     * JWT令牌最典型的的应用场景：登录认证<p>
     * 登录成功后，生成令牌<p>
     * 后续每个请求，都要携带JWT令牌，系统在每次请求处理之前，先校验令牌，通过后，再处理<p>
     *
     * @param args
     */
    public static void main(String[] args) {

    }
}
